part of '../repository.dart';

const _kWebTransactionHistoryItemPurchaseItemKey = 'purchase_item';
const _kWebTransactionHistoryItemAmountKey = 'amount';
const _kWebTransactionHistoryItemTransactionTimeKey = 'transaction_time';

class _WebTransactionHistoryItemDto extends Equatable {
  const _WebTransactionHistoryItemDto._internal({
    required this.purchaseItemDto,
    required this.amountDto,
    required this.transactionTimeDto,
  });

  final ApiWebPurchaseItemDto purchaseItemDto;
  final ApiMoneyAmountDto amountDto;
  final ApiTimeDto transactionTimeDto;

  @override
  List<Object?> get props {
    return [
      purchaseItemDto,
      amountDto,
      transactionTimeDto,
    ];
  }

  factory _WebTransactionHistoryItemDto.fromJson(Map<String, dynamic> json) {
    final purchaseItemJson =
        json[_kWebTransactionHistoryItemPurchaseItemKey] as Map<String, dynamic>;
    final purchaseItemDto = ApiWebPurchaseItemDtoFactory().fromJson(purchaseItemJson);

    final amountJson = json[_kWebTransactionHistoryItemAmountKey] as Map<String, dynamic>;
    final amountDto = ApiMoneyAmountDto.fromJson(amountJson);

    final transactionTimeString = json[_kWebTransactionHistoryItemTransactionTimeKey] as String;
    final transactionTimeDto = ApiTimeDto.fromString(transactionTimeString);

    return _WebTransactionHistoryItemDto._internal(
      purchaseItemDto: purchaseItemDto,
      amountDto: amountDto,
      transactionTimeDto: transactionTimeDto,
    );
  }

  WebTransactionHistoryItem toEntity() {
    return WebTransactionHistoryItem(
      purchaseItem: purchaseItemDto.toEntity(),
      amount: amountDto.toEntity(),
      transactionTime: transactionTimeDto.toEntity(),
    );
  }
}
